#pragma once

#include "move.h"
#include "board.h"
#include <string>

//Definuje vyznam zpravy
enum ComMessage: unsigned __int32 {
  HELLO = 0x1111,									// klient navazuje spojeni
  OK = 0x1114,										// server prijima klienta
  
  DO_MOVE = 0x2121,								// server vyziva klienta, aby zaslal svuj tah
  MOVE_SENT = 0x1122,							// klient odesila svuj tah
  MOVE_OK = 0x2123,								// server potvrzuje tah klienta - vse v poradu
  MOVE_DID_NOT_CAPTURE = 0x2124,	// server potvrzuje tah klienta - tah podle pravidel, ale klient 
																	// porusil pravidlo o povinnem skakani, figura, ktera se provinila, byla odstranena
  MOVE_INVALID	= 0x2225,					// server odpovida na tah klienta - neplatny tah

  GAME_WON	= 0x2131,							// hra ukoncena - klient vyhral
  GAME_LOST	= 0x2132,							// hra ukoncena - klient prohral
  GAME_DRAWN = 0x2133,						// hra ukoncena - remiza
  
	GAME_ERROR = 0x2134,						// hra ukoncena - souper opustil hru

	UNKNOWN = 0xffff
};

// Definice figur
enum ComCheckers: unsigned __int32 {
  white_normal = 1,
  white_queen = 3,

  black_normal = 2,
  black_queen = 4
};

//Datova struktura, ktera se posila pri komunikaci mezi serverem a klienty
struct ComData {
  ComMessage Msg;									// Urcuje vyznam zpravy
	std::string Identification; 		// Identifikace klienta (jmeno hrace, verze programu ...)
	CheckerColor Player;						// Identifikace klienta - barva kamenu
	std::string errorMsg;						// chybova zprava

	Board CurrentBoard;							// Rozlozeni figur na sachovnici
  Move CurrentMove;								// Tah zasilany klientem

	std::string ToXML();
	void FromXML(std::string s);
private:
	std::string	ComMessageToString();
	void ComMessageFromString(std::string s);
	std::string BoardToString();
	void BoardFromString(std::string s);

	static std::string intToString (int i);
	static std::string arrayToString(int* a, int lenght);
	static int stringToArray(std::string str, int* a);
};


